<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>forEach</title>
</head>
<body>
            <script>
                var arr = ["aa","bb","cc"];      //声明一个数组
                function foo(v,index,a) {      //a 是循环这个数组，可以不写
                    console.log(v+index);             //v代表这个数组每次传入的值是键/key（arr[i]），index是索引
                    console.log(a);               //打印一下这个第三个数值，forEach有三个值
                }
                arr.forEach(foo);                //打印传入forEach的值, 调用函数foo

            //forEach内部实现的原理：
                Array.prototype.myForEach = function(callback){  //Array.prototype与所有构造函数一样，您可以更改构造函数的原型对象，以对所有 Array 实例进行更改。
                    var arr = this.valueOf();//这个数组对象的原始值，就是数组
                    for (var i = 0;i<arr.length;i++){   //循环
                        callback(arr[i],i,arr);      //调用函数（arr[i]）      //callback 函数会被依次传入三个参数：数组当前项的值; 数组当前项的索引; 数组对象本身
                    }
                };
                arr.myForEach(foo);
//                var callback = foo;
//                callback()
            </script>
</body>
</html>